﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace OrderManager
{
    public partial class ModifyFoodData : Form
    {
        internal ModifyFoodData()
        {
            InitializeComponent();
            for (int i = 0; i < Program.foodList.Count; ++i)
            {
                this.SelectFood.Items.Add(Program.foodList[i].Name);
            }
        }

        // A kiválasztott étel aktuális adatainak beírása a megfelelő mezőkbe
        private void ShowItemDetails(object sender, EventArgs e)
        {
            int i = CommonFunctions.FindItemByName(Program.foodList, this.SelectFood.SelectedItem.ToString());
            if (i != -1)
            {
                this.nameBox.Text = Program.foodList[i].Name;
                this.priceBox.Text = Program.foodList[i].Price.ToString();
            }
            return;
        }

        // A módosítás elvégzése
        // Ez a függvény nem menti a változásokat a menüt tartalmazó fájlba, csak a programváltozóba
        private void AcceptChanges(object sender, EventArgs e)
        {
            string newName = nameBox.Text.Trim();
            int newCost;

            
            // Az érvénytelen bevitelek kiszűrése
            if (this.SelectFood.SelectedItem == null)
            {
                MessageBox.Show("Előbb ki kell választani a módosítandó ételt.");
                return;
            }


            // Az ár ellenőrzése
            if (!int.TryParse(priceBox.Text, out newCost) || newCost <= 0)
            {
                MessageBox.Show("Az ár pozitív egész kell, hogy legyen!");
                this.priceBox.SelectAll();
                this.priceBox.Focus();
                return;
            }

            // Mivel a '%' karakter tagoló karakter a menüben, ez ne fordulhasson elő a névben !
            // A név nem lehet üres.
            int a = CommonFunctions.FindItemByName(Program.foodList, this.SelectFood.SelectedItem.ToString());
            if (newName.Length < 5 || a == -1 || newName.Contains('%'))
            {
                MessageBox.Show("A megadott név érvénytelen.\n\nLegalább 5 karakter hosszúnak kell lennie\n és nem tartalmazhatja a % karaktert.");
                this.nameBox.SelectAll();
                this.nameBox.Focus();
                return;
            }
            

            
            // Ha az ellenőrzés sikeres, írjuk át a kiválasztott étel adatait
            Program.foodList[a].Name = newName;
            Program.foodList[a].Price = newCost;

            this.SelectFood.Items.Clear();
            for (int i = 0; i < Program.foodList.Count; ++i)
            {
                this.SelectFood.Items.Add(Program.foodList[i].Name);
            }

            MessageBox.Show("A módosítások elmentve.");

            return;
        }

        // Ha több ételt is módosítanánk, fölösleges lenne a fájlt minden egyes étel módosításakor újra átírni; ezért írjuk át csak akkor, amikor bezárjuk az ablakot
        private void SaveChanges(object sender, EventArgs e)
        {
            MenuUpdater.update(Program.foodList);
            this.Close();
            return;
        }
    }
}
